package entidades;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Controlador {
    public Celula primeira, ultima;
    public int tamanho = 0;
    
    public void Controlador(){
        primeira = null;
        ultima = primeira;
    }
        
    private void inicia(Object elemento){
        primeira = new Celula();
        ultima = primeira;
        Celula novaCelula = new Celula();
        novaCelula.setElemento(elemento);
        novaCelula.setProximo(null);
        ultima.setProximo(novaCelula);
        ultima = novaCelula;
        tamanho++;
    }
    
    public void inserirComeco(Object elemento){
        if(tamanho == 0){
           inicia(elemento);
        }else{
            Celula novaCelula = new Celula();
            novaCelula.setElemento(elemento);
            novaCelula.setProximo(primeira.getProximo());
            primeira.setProximo(novaCelula);
            tamanho++;
        }
    }
    
    public void inserirFim(Object elemento){
        if(tamanho == 0){
            inicia(elemento);
        }else{
            Celula novaCelula = new Celula();
            novaCelula.setElemento(elemento);
            novaCelula.setProximo(null);
            ultima.setProximo(novaCelula);
            ultima = novaCelula;
            JOptionPane.showMessageDialog(null, "Elemento inserido no final com sucesso.");
            tamanho++;
        }            
    }
    
    public void removerComeco(){
        if(tamanho == 0){
            JOptionPane.showMessageDialog(null, "Estrutura vazia.");
        }else if(tamanho == 1){
            removerFim();
        }else{
            JOptionPane.showMessageDialog(null, "Elemento removido com sucesso.");
            Celula remove = primeira.getProximo();
            primeira.setProximo(remove.getProximo());
            remove.setProximo(null);
            remove = null;
            tamanho--;
        }
        
    }
    
    public void removerFim(){
        if(tamanho == 0){
           JOptionPane.showMessageDialog(null, "Estrutura Vazia");
        }else if(tamanho == 1){
           JOptionPane.showMessageDialog(null, "Elemento removido com sucesso.");
            primeira.setProximo(null);
            ultima = null;
            tamanho--;
        }else{
           JOptionPane.showMessageDialog(null, "Elemento removido com sucesso.");
            Celula auxiliar = primeira.getProximo();
            for (int i = 1; i < tamanho - 1; i++) {
                auxiliar = auxiliar.getProximo();
            }
            auxiliar.setProximo(null);
            ultima = null;
            ultima = auxiliar;
            tamanho--;
    }
    }
    
    public void verificaElemento(String elemento){
        Celula auxiliar = primeira.getProximo();
        if(tamanho == 0){
            System.out.println("Estrutura vazia.");
        }else{
        int contador = 0;
        while(contador < tamanho){
           if(elemento == auxiliar.getElemento().toString()){
               System.out.print("[ Consulta");
               System.out.print(" ]-[ ");
               System.out.print(auxiliar.getElemento());
               System.out.print(" ]");
           }
           System.out.println("");
           contador++;
           auxiliar = auxiliar.getProximo();
       }
    }
    }
    
    public void imprimeElementos(){
        if(tamanho == 0){
            System.out.println("Estrutura vazia.");
        }else{
        Celula auxiliar = primeira;
        int contador = 1;
         while (contador <= tamanho){
            auxiliar = auxiliar.getProximo();
            System.out.print("[ ");
            System.out.print(contador + " ]-[ ");
            System.out.print(auxiliar.getElemento());
            System.out.print(" ] ");
            contador++;
            
        }
        }
        System.out.println("");
    }
    
    public void apagaEstrutura(){
        if(tamanho == 0){
            JOptionPane.showMessageDialog(null, "Estrutura está vazia.");
        }else{
            JOptionPane.showMessageDialog(null, "Estrutura apagada.");
            primeira = ultima = null;
            tamanho = 0;
        }
        
    }
    
    public int tamanhoEstrutura(){
        if(tamanho == 0){
            System.out.println("Estrutura vazia.");
        }else{
            System.out.println("Tamanho: " + tamanho);
        }
        return tamanho;
    }
    
}//Controlador
